

#pragma once

#include <memory>
#include <string>
#include <list>

namespace tools{

    namespace form{

    struct Form;

    struct Data;

    struct Block;
    struct Content;

    struct Config
    {
        typedef ::std::string 
            Str;
        typedef Str::value_type
            Ch;
        typedef ::std::list<Str>
            ListStr;

//         typedef ::std::shared_ptr<Form>
//             PForm;
//         typedef ::std::weak_ptr<Form>
//             WForm;
// 
//         typedef ::std::list<PForm>
//             PForms;
//         typedef ::std::list<WForm>
//             WForms;

        typedef ::std::shared_ptr<Data>
            PData;


        typedef ::std::shared_ptr<Block>
            PBlock;
        typedef ::std::weak_ptr<Block>
            WBlock;

        typedef ::std::list<PBlock>
            PBlocks;
        typedef ::std::list<WBlock>
            WBlocks;

        typedef ::std::shared_ptr<Content>
            PContent;
        typedef ::std::weak_ptr<Content>
            WContent;

        typedef ::std::list<PContent>
            PContents;
        typedef ::std::list<WContent>
            WContents;

        virtual ~Config(){}
    };

    }//namespace form
}//namespace tools


